{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ZooKeeper简介"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 分布式协调服务"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 核心定位: 分布式环境中的协调服务，主要用于解决分布式系统中的协调问题\n",
    "- 主要功能:\n",
    "  - 全局命名服务\n",
    "  - RPC通信原理中的服务注册中心\n",
    "  - 全局分布式锁\n",
    "  - 分布式环境中的节点管理"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分布式环境"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 基本特征:\n",
    "  - 服务独立部署在不同机器上\n",
    "  - RPC节点地位对等\n",
    "  - 需要协调共享资源访问\n",
    "- 典型问题:\n",
    "  - 服务动态发现：调用方不知道服务具体位置\n",
    "  - 资源竞争：多节点访问共享资源需要协调"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 服务配置中心"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 工作机制:\n",
    "  - 服务提供者向配置中心注册服务信息（IP、端口、服务名）\n",
    "  - 调用方通过配置中心查询服务位置\n",
    "  - 支持服务动态上下线\n",
    "- 必要性:\n",
    "  - 解决分布式系统中服务发现难题\n",
    "  - 避免硬编码服务地址\n",
    "  - 示例：订单服务部署4个实例时，客户端无需维护完整服务列表"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分布式锁 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 与传统锁区别:\n",
    "  - 传统锁（互斥锁、读写锁）仅适用于单进程多线程\n",
    "  - 分布式锁协调跨机器进程访问\n",
    "- 典型场景:\n",
    "  - 多节点竞争共享资源（如数据库记录）\n",
    "  - 主备集群服务切换\n",
    "- 实现原理:\n",
    "  - 基于Zookeeper的临时节点特性\n",
    "  - 通过节点创建/删除实现锁获取/释放\n",
    "  - 支持公平锁、可重入锁等高级特性\n",
    "- 开发准备:\n",
    "  - 下载zookeeper-3.4.10.tar.gz\n",
    "  - 配置文件：`conf/zoo.cfg`\n",
    "  - 启动服务：`bin/zkServer.sh`\n",
    "  - 客户端连接：`bin/zkCli.sh`\n",
    "- API重点:\n",
    "  - 节点管理（创建/获取/删除）\n",
    "  - Watcher机制实现事件监听\n",
    "  - 原生C/C++接口需要源码编译"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## ZooKeeper原理及介绍"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- https://www.cnblogs.com/xinyonghu/p/11031729.html"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 基本概念"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 核心定位：为分布式应用提供一致性协调服务的中间件，将简单易用的接口和性能高效、功能稳定的系统提供给用户\n",
    "- 节点特性：\n",
    "  - 提供多层级的节点命名空间（znode）\n",
    "  - 所有节点均可设置关联数据（不同于文件系统只有文件节点能存数据）\n",
    "  - 内存维护树状结构保证高吞吐低延迟\n",
    "  - 单节点数据上限1MB（不适合存储大量数据）\n",
    "- 通知机制：客户端可对znode建立watcher事件，节点变化时会收到通知并触发业务调整"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分布式系统特征"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 组成方式：多台计算机组成整体一致对外处理请求\n",
    "- 通信机制：内部通过REST/RPC进行机器间通信\n",
    "- 请求流程：客户端到服务端的单次请求会经历多台计算机协作处理\n",
    "- 典型架构：\n",
    "  - 服务器集群（如服务器A、B）\n",
    "  - 分布式文件系统（如文件服务器1、2、3）\n",
    "  - HA主备机制"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 技术选型认知"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 使用原则：\n",
    "  - 不需要精通所有底层原理即可使用中间件\n",
    "  - 重点理解在项目中解决的具体问题和使用场景\n",
    "  - 典型应用场景包括：全局命名服务、服务注册中心、分布式锁等\n",
    "- 面试策略：\n",
    "  - 明确技术选型原因（如ZooKeeper用于RPC服务发现）\n",
    "  - 区分\"使用\"和\"精通\"的掌握程度\n",
    "  - 采用引导式沟通：先阐述已知领域再承认未知领域\n",
    "- 学习建议：\n",
    "  - 先掌握核心应用场景再扩展其他功能\n",
    "  - 通过实际项目需求驱动深度研究\n",
    "  - 关注行业高频面试点（如分布式锁实现）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 技术能力展示方法论"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 简历撰写：\n",
    "  - 使用\"精通/熟练/掌握\"分级描述技能\n",
    "  - 项目技术栈应体现知识广度\n",
    "  - 重点突出核心技术掌握点\n",
    "- 面试沟通：\n",
    "  - 40%技术能力+40%沟通表达\n",
    "  - 对不熟悉的问题可关联已知技术点展开\n",
    "  - 主动引导话题至优势领域\n",
    "- 成长路径：\n",
    "  - 通过面试反馈明确重点研究方向\n",
    "  - 项目经验与原理学习相互促进\n",
    "  - 避免\"全精通\"的极端学习思维"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "C++17",
   "language": "C++17",
   "name": "xcpp17"
  },
  "language_info": {
   "name": "C++17"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
